package br.com.virtual.base.controller.newslettter;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.virtual.base.controller.cadastro.ProdutoMB;
import br.com.virtual.base.controller.util.VirtualMB;
import br.com.virtual.base.service.SenderEmail;
import br.com.virtual.cadastrar.model.Produto;
import br.com.virtual.cadastrar.service.ProdutoService;

@ManagedBean
@SessionScoped
public class NewsMB extends VirtualMB {

	private static final long serialVersionUID = 1L;

	private List<Produto> produtos;
	private List<Produto> produtosFiltro;
	private List<Produto> produtosNews;
	private List<Produto> produtosGerar;

	private Produto produto;
	private String nomeBuscar;

	@EJB
	ProdutoService produtoService;

	@EJB
	SenderEmail senderEmail;

	public void buscarProdutos() {

		if (this.nomeBuscar.length() > 3) {
			this.setProdutos(this.produtoService
					.getListProdutoData(this.nomeBuscar));

			if (this.produtosNews != null && this.produtosNews.size() > 0)
				this.produtos.removeAll(this.produtosNews);
		}
	}

	public String gerar() {

		this.setProdutosGerar(new ArrayList<Produto>());
		for (Produto p : produtosNews) {

			this.getProdutosGerar().add(this.produtoService.read(p.getId()));
		}

		return "/newsletter/pre-visualizar.jsf?faces-redirect=true";
	}

	public void adicionarProduto(Produto produto) {

		if (this.produtosNews.size() <= 8) {
			this.produtosNews.add(produto);
			this.produtos.remove(produto);

			this.addFacesMessage("Produto selecionado com sucesso.",
					FacesMessage.SEVERITY_INFO, null);
		} else {
			this.addFacesMessage(
					"Impossível adicionar o produto. O número máximo de produtos em um newsletter é 8.",
					FacesMessage.SEVERITY_ERROR, null);
		}

	}

	public void removerProduto(Produto produto) {

		if (produto == null)
			produto = this.produto;

		this.produtos.add(produto);
		this.produtosNews.remove(produto);
	}

	public String enviar() {

		DecimalFormat formatMoeda = new DecimalFormat("##,###,###,##0.00",
				new DecimalFormatSymbols(new Locale("pt", "BR")));
		formatMoeda.setMinimumFractionDigits(2);
		formatMoeda.setMaximumFractionDigits(2);
		formatMoeda.setParseBigDecimal(true);

		ProdutoMB produtoBean = (ProdutoMB) getManagedBean("produtoMB");

		String email = "		<div id='tudo' style='width: 700px;'>"
				+ ""
				+ "			<div id='cabecalho' style='width: 100%;'>"
				+ ""
				+ ""
				+ "				<label class='apresentacao'"
				+ "					style='color: #000033; display: block; font-size: 18px; font-weight: bold; margin-left: 75px; margin-top: 5px;'>Separamos"
				+ "					para você alguns produtos com preços especiais.</label> "
				+ "				<a href='/index.jsf' class='logo'"
				+ "					style='display: inline-block; margin-top: 10px; text-decoration: none;'>"
				+ "					<img src='http://virtual.servidor/javax.faces.resource/logo_vs2.png.jsf?ln=assets/img'"
				+ "						style='width: 260px;' />"
				+ "				</a>"
				+ ""
				+ ""
				+ "			</div>"
				+ ""
				+ ""
				+ ""
				+ "			<div id='corpo'"
				+ "				style='padding-bottom: 5px;width: 100%; display: block; background-color: #000033;'>"
				+ "";

		for (Produto p : this.produtosGerar) {

			email = email
					.concat(""
							+ "					<div class='produto'"
							+ "						style='float: left; background-color: #FFFFFF; margin: 5px 0 0 5px; padding: 5px; width: 47.4% !important; height: 390px;'>"
							+ ""
							+ ""
							+ ""
							+ "						<div class='produto-imagem'"
							+ "							style='padding: 10px 0; text-align: center;'>"
							+ "							<img alt=''"
							+ "								src='http://virtual.servidor/temp/"
							+ produtoBean.fotoProduto(p).getDescricao()
							+ ".jpg'"
							+ "								style='width: 200px;' />"
							+ "						</div>"
							+ ""
							+ ""
							+ "						<div class='produto-nome'"
							+ "							style='color: #000033; font-size: 18px; font-weight: bold;'>"
							+ p.getNome()
							+ "						</div>"
							+ ""
							+ ""
							+ "						<div class='produto-valor'>"
							+ ""
							+ "							<span style='font-weight: bold;text-decoration: line-through;'>"
							+ "								DE "
							+ formatMoeda.format(p.getPreco_venda())
							+ "						 	</span>"
							+ ""
							+ "							<span style='color: #FF0000;font-size: 20px;font-weight: bold;'>"
							+ "								POR "
							+ formatMoeda.format(p.getPreco_venda_desconto())
							+ "							</span>"
							+ ""
							+ "						</div>"
							+ ""
							+ ""
							+ "						<div class='produto-parcelas' style='color: #000033;'>"
							+ "							Em até "
							+ p.getNumero_parcelas()
							+ "x de "
							+ formatMoeda.format(p.getPreco_venda_desconto()
									/ p.getNumero_parcelas())
							+ " sem juros."
							+ "						</div>"
							+ ""
							+ "						<a"
							+ "							href='http://virtual.servidor/exibir/produtodetalhes.jsf?p="
							+ p.getId()
							+ "'"
							+ "							class='produto-comprar'"
							+ "							style='background-color: #000033; border: 1px solid #000000; color: #FFFFFF; display: inline-block; font-weight: bold; margin-top: 5px !important; padding: 5px; text-decoration: none; width: auto; float: right;'>COMPRAR</a>"
							+ "" + "					</div>" + "");

		}

		email = email.concat(

		"				<div style='clear: both' />" + "			</div>" + "" + "		</div>");
		
		
		
		email = email.concat("<br/><br/>");
		email = email.concat("<hr color=\"#072F49\" width=\"100%\" size=\"4\">");
		email = email.concat("<center>Esse e-mail foi gerado automaticamente pelo sistema, por favor, Não responda!</center>");//
		email = email.concat("<br/><br/>");
		email = email.concat("<p>Caso não queria mais receber nossas newsletters, por favor acesse o site ");//
		email = email.concat("<a href=\"http://virtual.servidor/area_usuario/index.jsf\">http://virtual.servidor/area_usuario/index.jsf</a>, clique em ");
		email = email.concat("'Dados pessoais' e desmarque a opção 'Desejo receber e-mail de novidades e promoções.'</p>");//
		email = email.concat("<br/><br/>");


		this.senderEmail.sendNewsletter(email);

		this.produtosNews = null;
		this.nomeBuscar = "";
		this.produtos = null;
		this.produtosFiltro = null;
		this.produtosGerar = null;
		this.produto = null;

		return null;
		// return NEWSLETTER_PAGE_REDIR;
	}

	/*
	 * Getters and Setters
	 */
	public List<Produto> getProdutos() {
		if (produtos == null)
			this.setProdutos(new ArrayList<Produto>());
		return produtos;
	}

	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;

	}

	public String getNomeBuscar() {
		return nomeBuscar;
	}

	public void setNomeBuscar(String nomeBuscar) {
		this.nomeBuscar = nomeBuscar;
	}

	public List<Produto> getProdutosFiltro() {
		return produtosFiltro;
	}

	public void setProdutosFiltro(List<Produto> produtosFiltro) {
		this.produtosFiltro = produtosFiltro;
	}

	public List<Produto> getProdutosNews() {
		if (this.produtosNews == null)
			this.setProdutosNews(new ArrayList<Produto>());
		return produtosNews;
	}

	public void setProdutosNews(List<Produto> produtosNews) {
		this.produtosNews = produtosNews;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public List<Produto> getProdutosGerar() {
		if (produtosGerar == null)
			this.produtosGerar = new ArrayList<Produto>();
		return produtosGerar;
	}

	public void setProdutosGerar(List<Produto> produtosGerar) {
		this.produtosGerar = produtosGerar;
	}

}